home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / fax / src / faxd / UUCPLock.h < prev   
C/C++ Source or Header  |  1994-08-01  |  3KB  |  94 lines

  1. /*    $Header: /usr/people/sam/fax/faxd/RCS/UUCPLock.h,v 1.11 1994/03/31 21:52:30 sam Rel $ */
  2. /*
  3.  * Copyright (c) 1990, 1991, 1992, 1993, 1994 Sam Leffler
  4.  * Copyright (c) 1991, 1992, 1993, 1994 Silicon Graphics, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and 
  7.  * its documentation for any purpose is hereby granted without fee, provided
  8.  * that (i) the above copyright notices and this permission notice appear in
  9.  * all copies of the software and related documentation, and (ii) the names of
  10.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  11.  * publicity relating to the software without the specific, prior written
  12.  * permission of Sam Leffler and Silicon Graphics.
  13.  * 
  14.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  15.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  16.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  17.  * 
  18.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23.  * OF THIS SOFTWARE.
  24.  */
  25. #ifndef _UUCPLOCK_
  26. #define    _UUCPLOCK_
  27. /*
  28.  * UUCP Locking Support.
  29.  */
  30. #include <unistd.h>
  31. #include "Str.h"
  32.  
  33. class UUCPLock {
  34. private:
  35.     fxStr    file;            // lock file pathname
  36.     fxBool    locked;            // is lock currently held
  37.  
  38.     static uid_t UUCPuid;
  39.     static gid_t UUCPgid;
  40.     static void setupIDs();
  41.  
  42.     static time_t lockTimeout;
  43.  
  44.     fxBool    create();        // create lock file
  45.     fxBool    isNewer(time_t age);    // is lock file newer than age
  46.     fxBool    ownerExists(int fd);    // does owning process exist
  47. protected:
  48.     UUCPLock(const char* device);    // must use derived class
  49.  
  50.     virtual fxBool writeData(int fd) = 0;
  51.     virtual fxBool readData(int fd, pid_t& pid) = 0;
  52. public:
  53.     virtual ~UUCPLock();
  54.  
  55.     static uid_t getUUCPUid();
  56.     static gid_t getUUCPGid();
  57.     static void setLockTimeout(time_t);
  58.  
  59.     fxBool    lock();            // lock device
  60.     void    unlock();        // unlock device
  61.     fxBool    check();        // check if device is locked
  62. };
  63.  
  64. /*
  65.  * Lock files with ascii contents (System V style).
  66.  */
  67. class AsciiUUCPLock : public UUCPLock {
  68. private:
  69.     fxStr    data;            // data to write record in lock file
  70.  
  71.     fxBool writeData(int fd);
  72.     fxBool readData(int fd, pid_t& pid);
  73. public:
  74.     AsciiUUCPLock(const char* device);
  75.     ~AsciiUUCPLock();
  76. };
  77.  
  78. /*
  79.  * Lock files with binary contents (BSD style).
  80.  */
  81. class BinaryUUCPLock : public UUCPLock {
  82. private:
  83.     int        data;            // data to write record in lock file
  84.  
  85.     fxBool writeData(int fd);
  86.     fxBool readData(int fd, pid_t& pid);
  87. public:
  88.     BinaryUUCPLock(const char* device);
  89.     ~BinaryUUCPLock();
  90. };
  91.  
  92. extern UUCPLock* OSnewUUCPLock(const char* device);
  93. #endif /* _UUCPLOCK_ */
  94.